/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.laporananggaranrabrak;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.common.ClassUtility;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.zkoss.zkex.zul.Jasperreport;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Panel;

/**
 *
 * @author kris
 */
public class LaporanAnggaranRabRkaWnd extends ClassApplicationModule {

    private Label lblUnitKerja;
    private Label lblPlafonRAB;
    private Label lblPlafonRKA;
    private Label lblTotalPlafon;
    private Label lblTotalRAB;
    private Label lblTotalRKA;
    private Label lblTotalAnggaran;
    private Label lblTahunAnggaran;
    private Label lblIdUnitKerja;
    private Jasperreport jasperreport;
    private Panel panelReport;
    private Listbox lstboxPosBiaya;
    private String tahunKelompok;
    private ClassSession session;
    private LaporanAnggaranRabRkaDAO laporanAnggaranRabRakDAO;
    private DecimalFormat df;

    public LaporanAnggaranRabRkaWnd() {
        laporanAnggaranRabRakDAO = new LaporanAnggaranRabRkaDAOImpl();
        df = new DecimalFormat("#,##0.00");
    }

    public void onCreate() throws Exception {
        lblUnitKerja = (Label) getFellow("lblUnitKerja");
        lblIdUnitKerja = (Label) getFellow("lblIdUnitKerja");
        lblPlafonRAB = (Label) getFellow("lblPlafonRAB");
        lblPlafonRKA = (Label) getFellow("lblPlafonRKA");
        lblTotalPlafon = (Label) getFellow("lblTotalPlafon");
        lblTotalRAB = (Label) getFellow("lblTotalRAB");
        lblTotalRKA = (Label) getFellow("lblTotalRKA");
        lblTotalAnggaran = (Label) getFellow("lblTotalAnggaran");
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        lstboxPosBiaya = (Listbox) getFellow("lstboxPosBiaya");
        jasperreport = (Jasperreport) getFellow("jasper");
        panelReport = (Panel) getFellow("panelReport");
        session = new ClassSession("2009", "02001000");
        lblIdUnitKerja.setValue(session.getKodeUnit());
        lblTahunAnggaran.setValue(session.getThnAnggaran());
        Map tahun = laporanAnggaranRabRakDAO.getTahunKelompokAnggaranYangDigunakan(session.getThnAnggaran());
        tahunKelompok = tahun.get("tahunKelompok").toString();
        load();

    }

    public void load() throws Exception {
        Map unitKerja = laporanAnggaranRabRakDAO.getUnitKerjaByKodeUnit(lblIdUnitKerja.getValue());
        lblUnitKerja.setValue(unitKerja.get("Nama_unit_kerja").toString());
        Map totalRkaRab = laporanAnggaranRabRakDAO.getTotalRkaRab(lblIdUnitKerja.getValue(), lblTahunAnggaran.getValue());
        try {
            lblPlafonRKA.setValue(df.format(Float.valueOf(totalRkaRab.get("rka").toString())));
            lblPlafonRAB.setValue(df.format(Float.valueOf(totalRkaRab.get("rab").toString())));
            lblTotalPlafon.setValue(df.format(Float.valueOf(totalRkaRab.get("totalPlafon").toString())));
        } catch (Exception e) {
            lblPlafonRKA.setValue("0.0");
            lblPlafonRAB.setValue("0.0");
            lblTotalPlafon.setValue("0.0");
        }
        lstboxPosBiaya.getItems().clear();


        for (Map map : laporanAnggaranRabRakDAO.getAllByTahunAndKode(session.getKodeUnit(), tahunKelompok, session.getThnAnggaran())) {
            Listitem listitem = new Listitem();
            listitem.setValue(map);
            listitem.appendChild(new Listcell(map.get("jenisBiaya").toString()));
            listitem.appendChild(new Listcell(map.get("namaPosBiaya").toString()));
            listitem.appendChild(new Listcell(df.format(Float.valueOf(map.get("total").toString()))));
            lstboxPosBiaya.appendChild(listitem);
        }

        Map resultRAB = laporanAnggaranRabRakDAO.getTotalRAB(session.getKodeUnit(), tahunKelompok, session.getThnAnggaran());
        Map resultRKA = laporanAnggaranRabRakDAO.getTotalRKA(session.getKodeUnit(), tahunKelompok, session.getThnAnggaran());
        float rab = Float.valueOf(resultRAB.get("totalRAB").toString());
        float rka = Float.valueOf(resultRKA.get("totalRKA").toString());
        lblTotalRAB.setValue(df.format(rab));
        lblTotalRKA.setValue(df.format(rka));
        lblTotalAnggaran.setValue(df.format(rab + rka));

    }

    public void cetakLaporanOnClick() throws Exception {
        jasperreport.setType("pdf");
        jasperreport.setSrc("reports/laporananggaranrabdanrkaunit/LaporanRABDanRKAUnit.jasper");
        List<Map> data = new ArrayList<Map>();
        Map map1 = new HashMap();
        map1.put("Nama_unit_kerja", lblUnitKerja.getValue().toString());
        map1.put("rka", lblPlafonRKA.getValue().toString());
        map1.put("rab", lblPlafonRAB.getValue().toString());
        map1.put("totalPlafon", lblTotalPlafon.getValue().toString());
        map1.put("totalRKA", lblTotalRKA.getValue().toString());
        map1.put("totalRAB", lblTotalRAB.getValue().toString());
        map1.put("totalAnggaran", lblTotalAnggaran.getValue().toString());


        for (Map map : laporanAnggaranRabRakDAO.getAllByTahunAndKode(session.getKodeUnit(), tahunKelompok, session.getThnAnggaran())) {
            Map m = new HashMap();
            m.put("jenisBiaya", map.get("jenisBiaya").toString());
            m.put("namaPosBiaya", map.get("namaPosBiaya").toString());
            m.put("total", df.format(Float.valueOf(map.get("total").toString())));
            data.add(m);
        }

        jasperreport.setParameters(map1);
        jasperreport.setDatasource(ClassUtility.createDatasource(data));
        panelReport.setVisible(true);
        panelReport.setOpen(true);

    }
}
